;$F-
;Program : Digitln intenzimetr
;Verze   : v1.00
;Datum   : 17. 1. 2015
;Autor   : Ondej Klva
;$F+
;***********************************************************************************************************************
;************** TYP PROCESORU ******************************************************************************************

		.DEVICE	ATMEGA16

		.HIFUSE	0B11001111
		.LOFUSE	0B11101111
		.LOCK	0B11111111

		RJMP	INIT

		.ORG	0X002
		RJMP	PULZY

		.ORG	INT1addr
		RJMP	TEPLOTA

		.ORG	OC1AADDR
		RJMP	CAS

;***********************************************************************************************************************
;************** PROMENNE V RAM *****************************************************************************************

		.DSEG	SRAM_START

TEP0:		.BYTE	6
DISP:		.BYTE	5
PULZ:		.BYTE	2
PULZ1:		.BYTE	2
PULZ2:		.BYTE	2
PULZ3:		.BYTE	2
PULZ4:		.BYTE	2
PULZ5:		.BYTE	2
PULZ6:		.BYTE	2
PULZ7:		.BYTE	2
PULZ8:		.BYTE	2
PULZ9:		.BYTE	2
PULZ10:		.BYTE	2
CYKL:		.BYTE	1
PULZJ:		.BYTE	1
PULZD:		.BYTE	1
PULZS:		.BYTE	1
PULZT:		.BYTE	1
PULZDT:		.BYTE	1
PULZST:		.BYTE	1
PULZM:		.BYTE	1
PULZDM:		.BYTE	1
PULZSM:		.BYTE	1

;***********************************************************************************************************************
;************** PORTY A BITY *******************************************************************************************

		.CSEG
		.IBIT	SMT0=PORTD,7
		.IBIT	TLAC=PORTD,4
		.EQU	PLCD=PORTA
		.EQU	SIGNAL=portD

;***********************************************************************************************************************
;************** KONSTANTY, SYMBOLICKA JMENA ****************************************************************************

		.SET	XTAL = 16000000
		.SET	KPRUM =	50
		.SET	PLUS = ' '
		.SET	MINUS =	'-'

;***********************************************************************************************************************
;************** SOUBORY INCLUDE ****************************************************************************************

		.CSEG

		.INCLUDE "$WINAVR\INCFILES\INI.INC"
		.INCLUDE "$WINAVR\INCFILES\MCS.INC"
		.INCLUDE "$WINAVR\INCFILES\A32.INC"
		.INCLUDE "$WINAVR\INCFILES\DBG.INC"
		.INCLUDE "LCD_M08.INC"

;***********************************************************************************************************************
;************** INICIALIZACE *******************************************************************************************

		.SECT	INIT

		INIT_RWM
		INIT_LCD

		LDI16	R16,$FFFF
		STS16	TEP0+4,R16

		LDI	R16,0B01100000
		OUT	ddr(SIGNAL),r16
		LDI	R16,0B11111111
		OUT	SIGNAL,r16

;...uzivatelska inicializace

		RJMP	MAIN

		.ENDSECT

;***********************************************************************************************************************
;************** HLAVNI PROGRAMOVA SMYCKA *******************************************************************************

		.SECT	MAIN

		IN	R16,MCUCR
		ANDI	R16,0B11111011
		ORI	R16,0B00001000
		OUT	MCUCR,R16

		IN	R16,GICR
		ORI	R16,0B10000000
		OUT	GICR,R16

		IN	R16,MCUCR
		ORI	R16,0B00000011
		OUT	MCUCR,R16

		IN	R16,GICR
		ORI	R16,0B01000000
		OUT	GICR,R16

		IN	R16,TIMSK
		ORI	R16,0B00010000
		OUT	TIMSK,R16

		LDI	R16,0B00000000
		OUT	TCCR1A,R16

		LDI	R16,0B00001101
		OUT	TCCR1B,R16

		LDI	R16,HI(15624)
		OUT	OCR1AH,	R16

		LDI	R16,LO(15624)
		OUT	OCR1AL,R16

		LDS	R16,CYKL
		CPI	R16,0
		BREQ	ZACATEK

		SEI
		RJMP	PC

ZACATEK:	LCD_TEX	'Charging...',RAD1,4
		RCALL	ZPOZDI
CYKLUS:		LDS	R16,CYKL
		RCALL	RAD2
		LCD1	3
		RCALL	ZPOZDI
		LDS	R16,CYKL
		RCALL	RAD2
		LCD1	4
		RCALL	ZPOZDI
		LDS	R16,CYKL
		RCALL	RAD2
		LCD1	5
		RCALL	ZPOZDI
		LDS	R16,CYKL
		RCALL	RAD2
		LCD1	6
		RCALL	ZPOZDI
		LDS	R16,CYKL
		RCALL	RAD2
		LCD1	7
		RCALL	ZPOZDI
		LDS	R16,CYKL
		INC	R16
		STS	CYKL,R16
		CPI	R16,16
		BRNE	CYKLUS

		CLRLCD
		LCD_TEX	'Intensity:',RAD1,3
		LCD_TEX	'Bq*cm2',RAD2,9
		SEI
		RJMP	PC

		.ENDSECT

		.SECT	PULZY

		IN	R16,GICR
		ANDI	R16,0B10111111
		OUT	GICR,R16


		LDI	R16,0
		OUT	SIGNAL,R16
		SBIS	PIN(TLAC)
		BRNE	CELKEM

		RCALL	CHVILKA
		IN	R16, TIMSK
		ORI	R16, 0B00010000
		OUT	TIMSK, R16

		LDS16	R16,PULZ
		INC16	R16
		STS16	PULZ,R16

		RJMP	KONEC

CELKEM:		IN	R16, TIMSK
		ANDI	R16, 0B11101111
		OUT	TIMSK, R16

		LDS	R16,PULZJ
		CPI	R16,9
		BREQ	DESITKY
		INC	R16
		STS	PULZJ,R16
		RJMP	ZOBRAZ

DESITKY:	CLR	R16
		STS	PULZJ,R16
		LDS	R16,PULZD
		CPI	R16,9
		BREQ	STOVKY
		INC	R16
		STS	PULZD,R16
		RJMP	ZOBRAZ

STOVKY:		CLR	R16
		STS	PULZD,R16
		LDS	R16,PULZS
		CPI	R16,9
		BREQ	TISICE
		INC	R16
		STS	PULZS,R16
		RJMP	ZOBRAZ

TISICE:		CLR	R16
		STS	PULZS,R16
		LDS	R16,PULZT
		CPI	R16,9
		BREQ	DESTIS
		INC	R16
		STS	PULZT,R16
		RJMP	ZOBRAZ

DESTIS:		CLR	R16
		STS	PULZT,R16
		LDS	R16,PULZDT
		CPI	R16,9
		BREQ	STOTIS
		INC	R16
		STS	PULZDT,R16
		RJMP	ZOBRAZ

STOTIS:		CLR	R16
		STS	PULZDT,R16
		LDS	R16,PULZST
		CPI	R16,9
		BREQ	MIL
		INC	R16
		STS	PULZST,R16
		RJMP	ZOBRAZ

MIL:		CLR	R16
		STS	PULZST,R16
		LDS	R16,PULZM
		CPI	R16,9
		BREQ	DESMIL
		INC	R16
		STS	PULZM,R16
		RJMP	ZOBRAZ

DESMIL:		CLR	R16
		STS	PULZM,R16
		LDS	R16,PULZDM
		CPI	R16,9
		BREQ	STOMIL
		INC	R16
		STS	PULZDM,R16
		RJMP	ZOBRAZ

STOMIL:		CLR	R16
		STS	PULZDM,R16
		LDS	R16,PULZSM
		CPI	R16,9
		BREQ	MILI
		INC	R16
		STS	PULZSM,R16
		RJMP	ZOBRAZ

MILI:		CLRLCD
		LCD_TEX	'Out of range!', RAD1, 2

ZOBRAZ:		CLRLCD
		LCD_TEX	'Counts total:',RAD1,2

		LCD_PAS	PULZSM,RAD2,3
		LCD_PAS	PULZDM
		LCD_PAS	PULZM
		LCD1	' '
		LCD_PAS	PULZST
		LCD_PAS	PULZDT
		LCD_PAS	PULZT
		LCD1	' '
		LCD_PAS	PULZS
		LCD_PAS	PULZD
		LCD_PAS	PULZJ


KONEC:		LDI	R16,255
		OUT	SIGNAL,R16

		IN	R16,GIFR
		ORI	R16,0B01000000
		OUT	GIFR,R16

		IN	R16,GICR
		ORI	R16,0B01000000
		OUT	GICR,R16

		RETI

		.ENDSECT

		.SECT	CAS
		MOV16	PULZ10,PULZ9
		MOV16	PULZ9,PULZ8
		MOV16	PULZ8,PULZ7
		MOV16	PULZ7,PULZ6
		MOV16	PULZ6,PULZ5
		MOV16	PULZ5,PULZ4
		MOV16	PULZ4,PULZ3
		MOV16	PULZ3,PULZ2
		MOV16	PULZ2,PULZ1
		MOV16	PULZ1,PULZ

		CLR16	R16
		STS16	PULZ,R16
		STS	PULZJ,R16
		STS	PULZD,R16
		STS	PULZS,R16
		STS	PULZT,R16
		STS	PULZDT,R16
		STS	PULZST,R16
		STS	PULZM,R16
		STS	PULZDM,R16
		STS	PULZSM,R16

		CLR32	ACC
		LDS16	ACC,PULZ1
		CLR16	BCC
		LDS16	BCC,PULZ2
		ADD16	ACC,BCC
		LDS16	BCC,PULZ3
		ADD16	ACC,BCC
		LDS16	BCC,PULZ4
		ADD16	ACC,BCC
		LDS16	BCC,PULZ5
		ADD16	ACC,BCC
		LDS16	BCC,PULZ6
		ADD16	ACC,BCC
		LDS16	BCC,PULZ7
		ADD16	ACC,BCC
		LDS16	BCC,PULZ8
		ADD16	ACC,BCC
		LDS16	BCC,PULZ9
		ADD16	ACC,BCC
		LDS16	BCC,PULZ10
		ADD16	ACC,BCC

		BCD32	DISP,ACC,5
		CLRLCD
		LCD_PAS	DISP+4,RAD2,2
		LCD_PAS	DISP+3
		LCD_PAS	DISP+2
		LCD_PAS	DISP+1
		LCD1	','
		LCD_PAS	DISP+0
		LCD_TEX	'Intensity:',RAD1,3
		LCD_TEX	'Bq*cm',RAD2,9
		LCD1	0
		RETI

		.ENDSECT

		.SECT	TEPLOTA
		CLI
		RCALL	MERENI
		RCALL	ZOBLCD
		RCALL	SUB3

		LDI16	R16,$FFFF
		STS16	TEP0+4,R16
		CLRLCD

		IN	R16,GIFR
		ORI	R16,0B01111111
		OUT	GIFR,R16

		RETI

		.ENDSECT

		.SECT	MERENI

		LDI16	R24,0
		LDI16	R26,50000

MERENI1:	SBIS	PIN(SMT0)
		RJMP	NULA

		INC16	R24
		DEC16	R26
		BRNE	MERENI1
		RJMP	VYPOCET

NULA:		NOP
		DEC16	R26
		BRNE	MERENI1
		RJMP	VYPOCET

VYPOCET:	MOV16	R0,R24
		CPI16	TEP0+4,$FFFF
		BRNE	DALSI
		STS16	TEP0+4,R0

DALSI:		CLR32	R16
		LDS16	R16,TEP0+4
		MUL32	R16,KPRUM
		CLR32	R20
		MOV16	R20,R0
		ADD32	R16,R20
		DIV32	R16,KPRUM+1
		STS16	TEP0+4,R16

		MUL32	R16,2
		SUB32	R16,32000
		DVZ32	R16,47

		LDI08	TEP0+3,PLUS
		BRPL32	R16,KLAD
		NEG32	R16
		LDI08	TEP0+3,MINUS

KLAD:		BCD16	TEP0,R16,3
		RET


		.ENDSECT

		.SECT	ZOBLCD

		CLRLCD
		LCD_TEX	'Temp. :',RAD1,0
		LDS	R16,TEP0+2
		CPI	R16,0
		BREQ	ZOJED

ZOSTO:		LCD_PRP	TEP0+3,RAD1,9
		LCD_PAS	TEP0+2
		RJMP	ZOBLCD1

ZOJED:		LCD1	' ',RAD1,2
		LCD_PRP	TEP0+3

ZOBLCD1:	LCD_PAS	TEP0+1
		LCD1	'.'
		LCD_PAS	TEP0+0
		LCD1	$DF
		LCD1	'C'
		RET

		.ENDSECT


;***********************************************************************************************************************
;************** PODPROGRAMY ********************************************************************************************

		.SECT	ZPOZDI

		LDI   R18,241
		LDI   R17,158
		LDI   R16,13
		DEC   R16
		BRNE  PC-1
		DEC   R17
		BRNE  PC-4
		DEC   R18
		BRNE  PC-7
		RET

		.ENDSECT

		.SECT	CHVILKA

		LDI   R18,97
		LDI   R17,5
		LDI   R16,1
		DEC   R16
		BRNE  PC-1
		DEC   R17
		BRNE  PC-4
		DEC   R18
		BRNE  PC-7
		RET

		.ENDSECT

		.SECT	SUB3

		LDI   R18,0
		LDI   R17,251
		LDI   R16,248
		DEC   R16
		BRNE  PC-1
		DEC   R17
		BRNE  PC-4
		DEC   R18
		BRNE  PC-7
		RET

		.ENDSECT

;***********************************************************************************************************************
;***********************************************************************************************************************